MATLAB® is a product of The MathWorks, Inc. of Natick, Mass., which provides engineers, scientists, mathematicians, and educators across a diverse range of industries with an environment for technical computing applications. As a desktop application, MATLAB® allows scientists and engineers to interactively perform complex analysis and modeling in their familiar workstation environment. With many engineering and scientific problems requiring larger and more complex modeling, computations accordingly become more resource intensive and time-consuming. However, a single workstation can be limiting to the size of the problem that can be solved, because of the relationship of the computing power of the workstation to the computing power necessary to execute computing intensive iterative processing of complex problems in a reasonable time. For example, a simulation of a large complex aircraft model may take a reasonable time to run with a single computation with a specified set of parameters. However, the analysis of the problem may also require the model be computed multiple times with a different set of parameters, e.g., at one-hundred different altitude levels and fifty different aircraft weights, to understand the behavior of the model under varied conditions. This would require five-thousand computations to analyze the problem as desired and the single workstation would take an unreasonable or undesirable amount of time to perform these simulations. Therefore, it is desirable to perform a computation concurrently using multiple workstations when the computation becomes so large and complex that it cannot be completed in a reasonable amount of time on a single workstation.
Applications that are traditionally used as desktop applications, such as MATLAB®, need to be modified to be able to utilize the computing power of concurrent computing, such as parallel computing and distributed computing. Each machine or workstation needs to have its local copy of the application and between the different instances of the application, there needs to be a way to communicate and pass messages between the machines and workstations so that the multiple machines or workstations in the concurrent computing environment can collaborate with each other.
Message passing is a form of communication used in concurrent computing for different machines or workstations to communicate with each other in the concurrent computing environment. Communication is made by the sending of messages from one machine/workstation to another machine/workstation. Forms of messages include function invocation, signals, and data packets. One example of a message passing method that establishes a communication channel between machines or workstations is Message Passing Interface (MPI).
In conventional MPI implementations, the MPI implementations are statically linked against a specific application. If a user wishes to change to a different MPI implementation, the application needs to be recompiled before the different MPI implementation can be linked to the specific application. Argonne National Laboratory has developed MPICH2, an implementation of MPI, which allows a user to specify at a command line which MPI implementation the user wishes to use with an application prior to launching the application without recompiling the application. However, Argonne's MPICH2 like other conventional MPI implementations does not allow user to change MPI implementation after an application is launched without terminating the application.
Some MPI implementations only allows a specific single thread to make calls into the corresponding MPI library, hence software developers need to modify multi-threaded applications so that only a single thread make calls to the MPI library as the specific MPI implementation requires. Some MPI implementations allow multiple threads to make calls to corresponding library; however they do not allow simultaneous access to the library. Hence, if a multi-threaded application can originally make simultaneous calls to the same resource, the software developers would also need to modify the multi-threaded applications to avoid simultaneous access to the MPI library by multiple threads. These problems/modifications are cumbersome to the software developers of multi-threaded applications and the resultant multi-threaded applications are restricted to use only specific kind of MPI implementations, which is not always desirable for the end users of the multi-threaded applications, especially when custom MPI implementations have been designed to maximize certain performance of concurrent computing applications on specific hardware.